import router from "@/router"; // 引入路由实例
import store from "@/store"; // 引入vuex实例
import NProgress from "nprogress"; // 引入进度条
import "nprogress/nprogress.css"; // 引入进度条的样式

// 定义白名单 所有不限权限控制的页面
const whiteList = ["/login", "/404"];

// 路由的前置守卫
// eslint-disable-next-line space-before-function-paren
router.beforeEach(async (to, from, next) => {
  NProgress.start(); // 开启进度条
  console.log(to);
  // 特殊处理 member_homepage 页面，如果有 query 参数则允许访问
  // if (to.path === "/member_homepage" && Object.keys(to.query).length > 0) {
  //   next();
  //   NProgress.done();
  //   return;
  // }
  // 首先判断是否有token
  if (store.getters.token) {
    // 如果有token，继续判断是否去login
    if (to.path === "/login") {
      // 如果是去login页则，转跳的主页
      next("/");
    } else {
      // 判断是否已获取了管理员信息,没有就执行api获取
      if (!store.state.user.userInfo.user_id) {
        await store.dispatch("user/getUserInfo");
        // 筛选用户的可用路由
        // actions中函数 默认是Promise对象 调用这个对象 想要获取返回的值话 必须 加 await或者是then
        // actions是做异步操作的
        // const routes = await store.dispatch('permission/filterRoutes', menus)
        // routes就是筛选得到的动态路由
        // 动态路由 添加到 路由表中 默认的路由表 只有静态路由 没有动态路由
        // addRoutes  必须 用 next(地址) 不能用next()
        // router.addRoutes([...routes, { path: '*', redirect: '/404', hidden: true }])// 添加动态路由到路由表  铺路
        // 添加完动态路由之后
        // next(to.path)// 相当于跳到对应的地址  相当于多做一次跳转 为什么要多做一次跳转
      }
      next(); // 如果不是则正常放行
    }
  } else {
    // 如果没有token，继续判断是否去白名单的页面
    if (whiteList.indexOf(to.path) > -1) {
      // 如果是去白名单内的页面，则放行
      next();
    } else {
      // 如果不去白名单页面，则转跳到登入页
      next("/login");
    }
  }
  NProgress.done(); // 手动停止进度条，防止进度条不关闭问题
});

// 路由的后置守卫
router.afterEach(() => {
  NProgress.done(); // 停止进度条
});
